//
// Created by Jisam on 19/10/2024 19:54.
// Solution of  d
#include <bits/stdc++.h>

// 使用标准命名空间，简化标准库函数的调用
using namespace std;

// 全局变量n用于存储棋盘的大小
int n;
// str用于存储字母的映射关系，将'y'映射到'g'，形成单词"yizhong"
char str[200];
// chess用于存储棋盘的当前状态
char chess[101][101];
// ma用于标记棋盘上已经成功形成单词的字符位置
bool ma[101][101];

// dx和dy分别存储水平和垂直方向的偏移量，用于实现DFS搜索
const int dx[8] = {0, -1, -1, -1, 0, 1, 1, 1};
const int dy[8] = {1, 1, 0, -1, -1, -1, 0, 1};//八个方向

/**
 * @brief 深度优先搜索函数，用于寻找从当前位置开始是否能形成单词"yizhong"
 *
 * @param x 当前位置的横坐标
 * @param y 当前位置的纵坐标
 * @param w 当前需要匹配的字母
 * @param p 当前的方向索引
 * @return bool 如果能形成单词返回true，否则返回false
 */
bool dfs(int x, int y, char w, int p) {
    // 如果当前需要匹配的字母是'g'，说明已经成功形成单词"yizhong"
    if (w == 'g') {
        // 标记当前位置已经使用
        ma[x][y] = 1;
        return 1;
    }
    // 计算下一步的坐标
    int xx = x + dx[p], yy = y + dy[p];
    // 如果下一步的坐标有效，并且下一步的字母与当前需要匹配的字母相同
    if (xx >= 1 && yy >= 1 && xx <= n && yy <= n && chess[xx][yy] == str[w]){
        // 递归调用DFS函数，尝试下一步
        if (dfs(xx, yy, str[w], p)) {
            // 如果下一步成功形成单词，标记当前位置已经使用
            ma[x][y] = 1;
            return 1;
        }
    }
    // 如果不能形成单词，返回false
    return 0;
}

// 主函数
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // 设置字母映射，将'y'映射到'g'，用于形成单词"yizhong"
    str['y'] = 'i';
    str['i'] = 'z';
    str['z'] = 'h';
    str['h'] = 'o';
    str['o'] = 'n';
    str['n'] = 'g';

    // 输入棋盘的大小
    cin >> n;
    // 输入棋盘的当前状态
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> chess[i][j];
        }
    }

    // 遍历棋盘，寻找以'y'开始的可能形成单词的路径
    for (int i = 1; i <= n; i++) {
        {
            for (int j = 1; j <= n; j++) {
                if (chess[i][j] == 'y') {//如果是单词开头
                    for (int k = 0; k <= 7; k++) {//就八个方向搜索
                        if (dfs(i, j, 'y', k)) ma[i][j] = 1; //判断是否成单词
                    }
                }
            }
        }
    }

    // 输出结果，已经形成单词的字符用原字符输出，否则用'*'输出
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            if (ma[i][j]) { cout << chess[i][j]; }
            else { cout << '*'; }
        }
        cout << endl;
    }
    return 0;
}